﻿using System.Collections;
using System.Collections.Generic;
using UnityEngine;

/// <summary>
/// 方块栏管理
/// </summary>
public class TilesBarManager : MonoBehaviour
{
    public static TilesBarManager Instance;

    // 挂起方块列表
    public List<TileBase> suspendTiles;
    // 方块位置
    public List<Transform> tilePos;
    // 方块父对象
    public Transform tileParent;
    // 类型方块数量
    [SerializeField]
    public Dictionary<TileType, int> suspendType = new Dictionary<TileType, int>();
    // 方块操作记录
    public List<TileBase> OperationTiles;

    // 底栏的位置索引
    private int barPosIndex = 0;

    private void Awake()
    {
        Instance = this;
    }

    /// <summary>
    /// 获取方块在底栏的位置
    /// </summary>
    /// <param name="type"> 方块类型 </param>
    /// <returns></returns>
    public Vector2 GetTilePosInBar(TileBase tile)
    {
        // 底栏中是否有同类型方块
        barPosIndex = suspendTiles.FindLastIndex(e => e.tileType == tile.tileType);
        if (barPosIndex >= 0)
        {
            suspendType[tile.tileType] += 1;
            return tilePos[barPosIndex + 1].position;
        }
        else
        {
            if (!suspendType.ContainsKey(tile.tileType))
                suspendType.Add(tile.tileType, 1);
            else
                suspendType[tile.tileType] += 1;
            return tilePos[suspendTiles.Count].position;
        }
    }

    /// <summary>
    /// 添加底栏方块
    /// </summary>
    public void AddTileOnBar(TileBase tile)
    {
        if (barPosIndex >= 0)
            suspendTiles.Insert(barPosIndex + 1, tile);
        else
            suspendTiles.Insert(suspendTiles.Count, tile);
        TileManager.Instance.levelTiles.Remove(tile);
        tile.transform.SetParent(tileParent);
        // 记录方块操作
        OperationTiles.Add(tile);
    }

    /// <summary>
    /// 底栏方块移动
    /// </summary>
    public void TileMoveOnBar()
    {
        if (suspendTiles.Count <= 0)
            return;
        for (int i = 0; i < suspendTiles.Count; i++)
        {
            suspendTiles[i].TileMove();
        }
    }

    /// <summary>
    /// 底栏方块检测
    /// </summary>
    public void TilesBarCheck(TileBase tile)
    {
        // 类型数量
        Debug.Log("同类型数量：" + suspendType[tile.tileType]);
        if (suspendType[tile.tileType] >= 3)
        {
            GameUIManager.Instance.UpdateScores(GameUIManager.Instance.scores + 30);
            suspendType[tile.tileType] -= 3;
            List<TileBase> temp = suspendTiles.FindAll(e => e.tileType == tile.tileType);
            for (int i = 0; i < 3; i++)
            {
                suspendTiles.Remove(temp[i]);
                OperationTiles.Remove(temp[i]);
                temp[i].TilePurging();
                // 重新调整位置
                TileMoveOnBar();
            }
        }
        // 整体数量
        else if (suspendTiles.Count >= 7)
        {
            Debug.Log("失败");
            if (!GameUIManager.Instance.isGameOver)
                GameUIManager.Instance.ShowGameFailPanel();
        }
    }

    /// <summary>
    /// 获取需要的类型和数量
    /// </summary>
    public Dictionary<TileType, int> GetTileTypeForNeed()
    {
        Dictionary<TileType, int> temp = new Dictionary<TileType, int>();
        int tempValue = 0;
        foreach (KeyValuePair<TileType, int> item in suspendType)
        {
            if (item.Value > tempValue)
            {
                tempValue = item.Value;
                temp.Clear();
                temp.Add(item.Key, item.Value);
            }
        }
        return temp;
    }


}
